"""
九九乘法表:
1*1=1
1*2=2  2*2=4
1*3=3  2*3=6 3*3=9
.......
........................9*9=81
"""
# 分析:乘法表中每一个公式的第一个数字就是列号, 第二个数字就是行号
# 得到结论:
# 1.九九乘法表是一个直角三角形的阵列, 9行9列
# 2.每一个公式的第一个数字就是列号, 第二个数字就是行号
# 3.每一个公式都是一个字符串

# 第一步: 打印一个直角三角形 9 行, 9 列
# 外部循环控制行数, 内部循环控制列数
for j in range(9):
    for i in range(j + 1):
        print('*', end=' ')
    print()

print('______________________')

# 第二步: 打印一个九九乘法表的阵列
# 将* 替换为一个字符串, '列 * 行 = 值'
for j in range(9):
    for i in range(j + 1):
        # 因为i 和j 都是从0开始的, 而 九九乘法表从1开始,所以我们需要再j 和 i 后边加1
        print(f'{i + 1} * {j + 1} = {(i + 1) * (j + 1)}', end=' ')
    print()

print('______________________')

# 第三步: 将结束符替换为\t(制表位) 保证数据对齐
for j in range(9):
    for i in range(j + 1):
        # 因为i 和j 都是从0开始的, 而 九九乘法表从1开始,所以我们需要再j 和 i 后边加1
        print(f'{i + 1} * {j + 1} = {(i + 1) * (j + 1)}', end='\t')
    print()

print('______________________')

# 练习3: 打印如下三角形 (使用循环嵌套, 提示空白部分可以打印空格)
'''
    *
   ***
  *****
 *******
*********
'''
# 分析1: 一共有多少行数据  5行  外层循环,循环5次
# 分析2: 一共有多少列空格, [4 3 2 1 0] 每一行的空格数是 5-n个, n为行数
# 分析3: 一共有多少列*, [1 3 5 7 9] 每一行的*数是2n-1  n为行数
# 分析4: 在同一行,既要书写空格,又要书写* 书写完成后在进行换行

# 外层循环执行5次,打印5行数据,range(1, 6) 则从1 - 5 每一行打印时,k获取的就是行数
for k in range(1, 6):
    # 打印空格  5-n
    for i in range(5 - k):
        print(' ', end='')
    # 打印* 2n-1
    for i in range(2 * k - 1):
        print('*', end='')
    # 外层循环执行一次后需要换行
    print()

